{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from scipy import signal\n",
    "import numpy as np\n",
    "import csv\n",
    "import io\n",
    "from past.builtins import unicode\n",
    "import argparse\n",
    "import logging\n",
    "import apache_beam as beam\n",
    "from apache_beam.io import ReadFromText\n",
    "from apache_beam.options.pipeline_options import PipelineOptions\n",
    "from apache_beam.options.pipeline_options import SetupOptions\n",
    "from io import StringIO\n",
    "import os\n",
    "import logging\n",
    "import pandas as pd\n",
    "from biosppy.signals import ecg\n",
    "import sys\n",
    "\n",
    "TARGET_SAMPLING_RATE=250\n",
    "DATA_SAMPLING_RATE=500\n",
    "INPUT_BEAT_SIZE=300"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "csv_row='germany,HR00003,HR00003.csv,37.0,F,\"norm,sr\",german,0,1,1,300002,300002'\n",
    "patinet_attributes_list=next(csv.reader(StringIO(csv_row), quotechar='\"', delimiter=',',quoting=csv.QUOTE_MINIMAL, skipinitialspace=True))\n",
    "patient_id=patinet_attributes_list[11]\n",
    "age=patinet_attributes_list[3]\n",
    "gender=patinet_attributes_list[9]\n",
    "diagnosis=patinet_attributes_list[10]\n",
    "race=patinet_attributes_list[8]\n",
    "file_name=patinet_attributes_list[2]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "path =  '/Users/aring/IdeaProjects/ECG-biometric/src/100k-data/sample-data/germany/DenData/'+file_name\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "all_beats_12lead_with_label_diagnosis = np.empty((0,12,INPUT_BEAT_SIZE+5), dtype=np.float)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "record = pd.read_csv(path, header=None)\n",
    "record.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "channel = record[1].values\n",
    "channel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ecg_info_extracted = ecg.ecg(signal=channel, sampling_rate=DATA_SAMPLING_RATE, show=False)\n",
    "rpeaks=ecg_info_extracted['rpeaks']\n",
    "rpeaks\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "one_beat=record[:][rpeaks[1]:rpeaks[1+1]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "one_beat.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "down_sampled_beat = signal.resample(one_beat, 300)\n",
    "down_sampled_beat.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.reshape(down_sampled_beat,(1,INPUT_BEAT_SIZE,12)).shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "heart_beats_12lead =  np.empty((0,12,INPUT_BEAT_SIZE), dtype=np.float)\n",
    "\n",
    "for i in range((len(rpeaks)-1)):\n",
    "    down_sampled_beat = signal.resample(record[:][rpeaks[i]:rpeaks[i+1]], 300).T\n",
    "    heart_beats_12lead=np.vstack((heart_beats_12lead,np.reshape(down_sampled_beat,(1,12,INPUT_BEAT_SIZE))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9, 12, 300)"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "heart_beats_12lead.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_of_beats=heart_beats_12lead.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.plot( heart_beats_12lead[1,:,:]) \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(0,11):\n",
    "    plt.plot( heart_beats_12lead[1,i,:]) \n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "all_beats_12lead_with_label_diagnosis = np.empty((0,12,INPUT_BEAT_SIZE+5), dtype=np.float)\n",
    "\n",
    "for i in range(0,num_of_beats):\n",
    "    one_beat_12lead = np.reshape(heart_beats_12lead[i], (12, 300))\n",
    "    label_column = np.repeat(patient_id, one_beat_12lead.shape[0])\n",
    "    label_column=np.reshape(label_column, (label_column.shape[0], 1))\n",
    "    diagnosis_column=np.repeat(diagnosis, one_beat_12lead.shape[0])\n",
    "    diagnosis_column=np.reshape(diagnosis_column, (diagnosis_column.shape[0], 1))\n",
    "    age_column=np.repeat(age, one_beat_12lead.shape[0])\n",
    "    age_column=np.reshape(age_column, (age_column.shape[0], 1))\n",
    "    gender_column=np.repeat(gender, one_beat_12lead.shape[0])\n",
    "    gender_column=np.reshape(gender_column, (gender_column.shape[0], 1))\n",
    "    race_column=np.repeat(race, one_beat_12lead.shape[0])\n",
    "    race_column=np.reshape(race_column, (race_column.shape[0], 1))\n",
    "    one_beat_12lead_with_label = np.append(one_beat_12lead,label_column,1)\n",
    "    one_beat_12lead_with_label = np.append(one_beat_12lead_with_label,diagnosis_column,1)\n",
    "    one_beat_12lead_with_label = np.append(one_beat_12lead_with_label,age_column,1)\n",
    "    one_beat_12lead_with_label = np.append(one_beat_12lead_with_label,gender_column,1)\n",
    "    one_beat_12lead_with_label = np.append(one_beat_12lead_with_label,race_column,1)\n",
    "    one_beat_12lead_with_label = np.reshape(one_beat_12lead_with_label,(1,12,305))\n",
    "    all_beats_12lead_with_label_diagnosis=np.vstack((all_beats_12lead_with_label_diagnosis,one_beat_12lead_with_label))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9, 12, 305)"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_beats_12lead_with_label_diagnosis.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([], shape=(0, 305), dtype='<U32')"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_beats_12lead_with_label_diagnosis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### splitting to train and test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "def split_train_test_for_identification(all_data_df,patientid_column_num):\n",
    "    df_by_patinetid=all_data_df.groupby(all_data_df.columns[patientid_column_num]).size().reset_index(name='count')\n",
    "    df_by_patinetid.columns=['patient_id','heartbeat_count']\n",
    "    patients_beatnum_dict=df_by_patinetid.to_dict('record')\n",
    "    num_of_patients_processed=0\n",
    "    for row in patients_beatnum_dict:\n",
    "        if row['heartbeat_count']>4:\n",
    "            patients_beats_data=all_data_df.loc[all_data_df[all_data_df.columns[patientid_column_num]]==row['patient_id']]\n",
    "            num_test_beats=int(row['heartbeat_count']*.2)\n",
    "            random_rows=np.random.choice(row['heartbeat_count'], size=num_test_beats, replace=False)\n",
    "            test_for_patient=patients_beats_data.iloc[random_rows,:]\n",
    "            train_for_patient=patients_beats_data.drop(patients_beats_data.index[random_rows])\n",
    "            if num_of_patients_processed>0:\n",
    "                train=train.append(train_for_patient)\n",
    "                test=test.append(test_for_patient)\n",
    "            else:\n",
    "                train=train_for_patient\n",
    "                test=test_for_patient\n",
    "\n",
    "            num_of_patients_processed=num_of_patients_processed+1\n",
    "    return (train,test)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "file_path='/Users/aring/IdeaProjects/ECG-biometric/src/100k-data/sample-data/output-dataflow-00000-of-00001.csv'\n",
    "df=pd.read_csv(file_path, delimiter=',', header=None)\n",
    "train,test=split_train_test_for_identification(df,3655)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(38, 3660)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(7, 3660)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
